package com.huahai.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.huahai.pojo.dto.space.analyze.*;
import com.huahai.pojo.entity.Picture;
import com.huahai.pojo.entity.Space;
import com.huahai.pojo.entity.User;
import com.huahai.pojo.vo.space.analyze.*;

import java.util.List;

/**
 * 空间分析服务
 *
 * @author huahai
 * @createDate 2025-08-09 11:23
 */
public interface SpaceAnalyzeService extends IService<Space> {

    /**
     * 空间资源使用分析
     *
     * @param spaceUsageAnalyzeDTO 空间资源使用分析参数
     * @param loginUser 登录用户
     * @return 空间资源使用分析结果
     */
    SpaceUsageAnalyzeVO getSpaceUsageAnalyze(SpaceUsageAnalyzeDTO spaceUsageAnalyzeDTO, User loginUser);

    /**
     * 空间图片分类使用分析
     *
     * @param spaceCategoryAnalyzeDTO 图片分类使用分析参数
     * @param loginUser 登录用户
     * @return 图片分类使用分析结果
     */
    List<SpaceCategoryAnalyzeVO> getSpaceCategoryAnalyze(SpaceCategoryAnalyzeDTO spaceCategoryAnalyzeDTO, User loginUser);

    /**
     * 空间图片标签使用分析
     *
     * @param spaceTagAnalyzeDTO 图片标签使用分析参数
     * @param loginUser 登录用户
     * @return 图片标签使用分析结果
     */
    List<SpaceTagAnalyzeVO> getSpaceTagAnalyze(SpaceTagAnalyzeDTO spaceTagAnalyzeDTO, User loginUser);

    /**
     * 空间图片大小使用分析
     *
     * @param spaceSizeAnalyzeDTO 图片大小使用分析参数
     * @param loginUser 登录用户
     * @return 图片大小使用分析结果
     */
    List<SpaceSizeAnalyzeVO> getSpaceSizeAnalyze(SpaceSizeAnalyzeDTO spaceSizeAnalyzeDTO, User loginUser);

    /**
     * 用户空间上传行为分析
     *
     * @param spaceUserAnalyzeDTO 用户空间上传行为分析参数
     * @param loginUser 登录用户
     * @return 用户空间上传行为分析结果
     */
    List<SpaceUserAnalyzeVO> getSpaceUserAnalyze(SpaceUserAnalyzeDTO spaceUserAnalyzeDTO, User loginUser);

    /**
     * 用户空间使用量排行分析
     *
     * @param spaceRankAnalyzeDTO 用户空间使用量排行分析参数
     * @param loginUser 登录用户
     * @return 排行前 N 的用户空间信息
     */
    List<Space> getSpaceRankAnalyze(SpaceRankAnalyzeDTO spaceRankAnalyzeDTO, User loginUser);

    /**
     * 空间分析的基本权限校验
     *
     * @param spaceAnalyzeDTO 空间分析参数
     * @param loginUser 登录用户
     */
    void checkSpaceAnalyzeAuth(SpaceAnalyzeDTO spaceAnalyzeDTO, User loginUser);

    /**
     * 自动填充空间分析参数
     *
     * @param spaceAnalyzeDTO 空间分析参数
     * @param queryWrapper 查询条件
     */
    void fillSpaceAnalyzeQueryWrapper(SpaceAnalyzeDTO spaceAnalyzeDTO, QueryWrapper<Picture> queryWrapper);
}
